#ifndef FUNCTIONALITYFACTORY_H
#define FUNCTIONALITYFACTORY_H

#include "Functionality/functionalityInterface.h"
#include <memory>

//这个类是一个抽象工厂类，用来创建不同的功能的
//通过具体的工厂类
//通过抽象工厂来创建不同的功能的步骤：
//1、我们定义了2个接口，一个是模块接口，用来创建不同的模块，如注册模块或登录模块。一个是通信接口用来创建不同的通信，如TCP、UDP。
//2、我们通过继承这两个接口，实现了具体的类，表示具体的通信和具体的功能模块。
//3、定义了一个功能接口，这个功能接口可以根据具体的实现类来实现不同的功能。具体类中需要存在模块和通信接口。
//4、抽象工厂，通过继承抽象工厂，我们可以实现不同的具体的工厂，如applyCertificateFactory就是创建申请证书功能的工厂。
//通过模块来组装产品

class FunctionalityFactory
{
public:
    FunctionalityFactory(const FunctionalityFactory &) = delete;
    ~FunctionalityFactory() = default;
    FunctionalityFactory& operator=(const FunctionalityFactory &) = delete;

    virtual std::shared_ptr<FunctionalityInterface> create() = 0;

protected:
    FunctionalityFactory() = default;
};

#endif
